Red Hat System Administration II 8.2
Задачи
После завершения этого раздела вы сможете запланировать выполнение команд по повторяющемуся расписанию с помощью пользовательского файла crontab.
Повторяющиеся пользовательские задания
Задания, запланированные для многократного выполнения, называются повторяющимися заданиями. Системы Red Hat Enterprise Linux поставляются с демоном crond
в пакете cronie, который включается и запускается по умолчанию специально для повторяющихся заданий. Демон crond
считывает несколько файлов конфигурации, по одному на пользователя (отредактировать их можно с помощью команды crontab), и набор системных файлов. Эти файлы конфигурации позволяют пользователям и администраторам контролировать время выполнения повторяющихся заданий.
Если поток вывода или поток ошибок запланированной команды не перенаправляется, демон crond
пытается отправить этот вывод или ошибку по электронной почте пользователю, которому принадлежит это задание (если этот параметр не переопределен), используя настроенный в системе почтовый сервер. В зависимости от среды может потребоваться дополнительная настройка. Поток вывода и поток ошибок запланированной команды можно направить в разные файлы.
Планирование повторяющихся пользовательских заданий
Обычные пользователи могут управлять заданиями с помощью команды crontab. Ее можно вызывать четырьмя способами.
Таблица 2.1. Примеры использования команды crontab
Команда | Назначение |
---|---|
crontab -l |
Отображение заданий текущего пользователя. |
crontab -r |
Удаление всех заданий текущего пользователя. |
crontab -e |
Изменение заданий текущего пользователя. |
crontab filename |
Удаление всех заданий и их замена заданиями из файла |
Примечание
Привилегированный пользователь может использовать опцию -u
с командой crontab для управления заданиями другого пользователя. Не используйте команду crontab для управления системными заданиями. Вместо этого применяйте методы, описанные в следующем разделе.
Формат пользовательского задания
Команда crontab -e по умолчанию вызывает редактор Vim, если в переменной среды EDITOR
не было указано что-то другое. Вводите по одному заданию на строку. Другие допустимые записи: пустые строки (обычно для удобства чтения), комментарии, начинающиеся с символа решетки (#), переменные среды в формате ИМЯ=значение
, которые действует для всех строк ниже объявления переменной. К наиболее часто используемым переменным относятся: переменная SHELL
, объявляющая оболочку для интерпретации оставшихся строк файла crontab, и переменная MAILTO
, определяющая получателя вывода по электронной почте.
Важно
Для отправки почты может потребоваться дополнительная настройка локального почтового сервера или ретранслятора.
Поля в файле crontab
отображаются в следующем порядке:
Minutes (минуты)
Hours (часы)
Day of month (день месяца)
Month (месяц)
Day of week (день недели)
Команда
Важно
Если значения в полях Day of Month
и Day of Week
отличаются от *
, команда выполняется, когда любое из этих полей удовлетворяет условиям. Например, чтобы команда выполнялась 15-го числа каждого месяца и каждую пятницу в 12:15
, используйте следующий формат задания:
15 12 15 * Fri command
Первые пять полей используют одинаковые синтаксические правила:
*
для «неважно»/всегда.Число для обозначения минут или часов, даты или дня недели. Для дней недели
0
означает воскресенье,1
— понедельник,2
— вторник и т. д.7
также означает воскресенье.x-y
для диапазона отx
доy
включительно.x,y
для списков. Списки также могут содержать диапазоны. Например,5,10-13,17
в столбцеMinutes
указывает, что задание должно выполняться через 5, 10, 11, 12, 13 и 17 минут после начала часа.*/x
для обозначения интервалаx
. Например,*/7
в столбцеMinutes
будет запускать задание каждые семь минут.
Кроме того, для месяцев и дней недели можно использовать трехбуквенные английские сокращения, например Jan, Feb и Mon, Tue.
Последнее поле содержит команду, которая должна быть выполнена с использованием командной оболочки по умолчанию. Можно использовать переменную среды SHELL, чтобы изменить оболочку для запланированной команды. Если команда содержит неэкранированный символ процента (%), он будет считаться символом новой строки, а все данные после него будут переданы команде в stdin
.
Пример повторяющихся пользовательских заданий
В этом разделе приведено несколько примеров повторяющихся заданий.
Следующее задание выполняет команду /usr/local/bin/yearly_backup ежегодно 2 февраля ровно в 9:00.
0 9 2 2 * /usr/local/bin/yearly_backup
Следующее задание отправляет сообщение электронной почты, содержащее слово
Chime
, владельцу этого задания каждые пять минут с 9:00 до 17:00 каждую пятницу в июле.*/5 9-16 * Jul 5 echo "Chime"
Вышеуказанный диапазон часов
9-16
означает, что таймер задания запускается с девятого часа (09:00) и выполняется до конца шестнадцатого часа (16:59). Задание начинает выполняться в09:00
с последним исполнением в16:55
, поскольку через пять минут после16:55
уже будет17:00
, что выходит за рамки указанного диапазона часов.Следующее задание выполняет команду /usr/local/bin/daily_report каждый будний день за две минуты до полуночи.
58 23 * * 1-5 /usr/local/bin/daily_report
Следующее задание выполняет команду mutt для отправки электронного письма
Checking in
получателюboss@example.com
каждый рабочий день (c понедельника по пятницу) в 9:00.0 9 * * 1-5 mutt -s "Checking in" boss@example.com % Hi there boss, just checking in.
Ссылки
Man-страницы crond(8), crontab(1) и crontab(5)